package cn.tedu.fruitshop.service.impl;

import cn.tedu.fruitshop.ex.ServiceException;
import cn.tedu.fruitshop.mapper.ItemMapper;
import cn.tedu.fruitshop.pojo.dto.ItemAddNewDTO;
import cn.tedu.fruitshop.pojo.dto.ItemUpdateInfoDTO;
import cn.tedu.fruitshop.pojo.entity.Item;
import cn.tedu.fruitshop.pojo.vo.ItemListItemVO;
import cn.tedu.fruitshop.pojo.vo.ItemStandardVO;
import cn.tedu.fruitshop.service.IItemService;
import cn.tedu.fruitshop.web.ServiceCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
@Service
@Slf4j
public class ItemServiceImpl implements IItemService {
    @Autowired ItemMapper itemMapper;


    @Override
    public void addNew(ItemAddNewDTO itemAddNewDTO) {
        log.debug("开始处理【添加商品】的业务，参数：{}", itemAddNewDTO);
        Item item=new Item();
        BeanUtils.copyProperties(itemAddNewDTO,item);
        log.debug("即将插入商品数据：{}", item);
        int rows = itemMapper.insert(item);
        if (rows != 1) {
            String message = "服务器老了,添加商品数据失败";
            throw new ServiceException(ServiceCode.ERR_INSERT, message);
        }
        log.debug("插入商品数据完成");
    }

    @Override
    public void delete(Integer id) {
        ItemStandardVO queryResult=itemMapper.getStandardById(id);
        if (queryResult == null){
            String message="删除商品失败,尝试访问的数据不存在";
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND,message);
        }
        int rows=itemMapper.deleteById(id);
        if (rows !=1){
            String message="服务器老了,删除商品数据失败";
            throw new ServiceException(ServiceCode.ERR_INSERT,message);
        }
    }

    @Override
    public List<ItemListItemVO> list(Integer cid,Integer page) {
        log.debug("开始处理查询商品列表的请求!参数为:{}",cid);

        return itemMapper.list(cid,page);
    }

    @Override
    public void updateInfoById(Integer id, ItemUpdateInfoDTO itemUpdateInfoDTO) {
        log.debug("开始处理【修改商品详情】的业务，参数ID：{}, 新数据：{}", id, itemUpdateInfoDTO);
        ItemStandardVO queryResult = itemMapper.getStandardById(id);
        if(queryResult==null){
            String message = "修改商品详情失败！尝试访问的数据不存在！";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
        }
        Item item=new Item();
        BeanUtils.copyProperties(itemUpdateInfoDTO,item);
        item.setId(id);
        log.debug("即将修改数据：{}", item);
        int rows = itemMapper.update(item);
        if(rows!=1){
            String message = "修改类别详情失败，服务器忙，请稍后再次尝试！";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_UPDATE, message);
        }
    }

    @Override
    public List<ItemListItemVO> selectByWd(String name) {
        return itemMapper.selectByWd(name);
    }

    @Override
    public ItemStandardVO getStandardById(Integer id) {
        return itemMapper.getStandardById(id);
    }

    @Override
    public List<ItemListItemVO> listAll() {
        List<ItemListItemVO> itemVOList = itemMapper.listAll();
        if (itemVOList == null){
            String message = "查询商品列表失败，服务器忙，请稍后再次尝试！";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_CONFLICT, message);
        }
        return itemVOList;
    }

    @Override
    public void setEnable(Integer id) {
        updateEnableById(id, 1);
    }

    @Override
    public void setDisable(Integer id) {
        updateEnableById(id, 0);
    }

    private void updateEnableById(Integer id, Integer enable) {
        String[] tips = {"禁用", "启用"};
        log.debug("开始处理【{}商品】的业务，参数：{}", tips[enable], id);
        // 调用Mapper对象的getDetailsById()方法执行查询
        ItemStandardVO standardResult = itemMapper.getStandardById(id);
        // 判断查询结果是否为null
        if (standardResult == null) {
            String message = tips[enable] + "查询商品数据失败，尝试访问的数据不存在！";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
        }

        // 判断查询结果中的enable是否为1
        if (standardResult.getEnable().equals(enable)) {
            String message = tips[enable] + "修改商品状态失败，当前品牌已经处于" + tips[enable] + "状态！";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_CONFLICT, message);
        }

        // 准备执行更新
        Item item = new Item();
        item.setId(id);
        item.setEnable(enable);
        int rows = itemMapper.update(item);
        if (rows != 1) {
            String message = tips[enable] + "修改商品状态失败，服务器忙，请稍后再次尝试！";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_UPDATE, message);
        }
    }
}
